﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Inmobiliaria.Services.Core.DTO;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
using System.Data;
using System.IO;


namespace Inmobiliaria.Data
{
    public class DaoPlanillaInmueble
    {
        MySql.Data.MySqlClient.MySqlConnection connection = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["INMOBILIARIA"].ConnectionString);
        public static int idPersona;
        public void GuardarInmueble(DtoPlanillaInmueble planilla)
        {
            /////Inmueble
            int tipoinmueble = planilla.TipoInmueble;
            string transaccion = planilla.Transaccion;
            int provincia = planilla.Provincia;
            int localidad = planilla.Localidad;
            int barrio = planilla.Barrio;
            string calle = planilla.Calle;
            string altura = planilla.Altura;
            string lote = planilla.Lote;
            string superficieCubierta = planilla.SuperficieCubierta;
            string habitaciones = planilla.Habitaciones;
            string baño = planilla.Baños;
            string agua = planilla.Agua;
            string asfalto = planilla.Asfalto;
            string balcon = planilla.Balcon;
            string clocas = planilla.Cloacas;
            string cocina = planilla.Cocina;
            string comedor = planilla.Comedor;
            string descripcion = planilla.Descripcion;
            string gas = planilla.Gas;
            string jardin = planilla.Jardin;
            string living = planilla.Living;
            string luz = planilla.Luz;
            string patio = planilla.Patio;
            string quincho = planilla.Quincho;
            string telefonoInmueble = planilla.TelefonoInmueble;
            string terraza = planilla.Terraza;
            string valorInmueble = planilla.ValorInmueble;
            string tipoMoneda = planilla.TipoMoneda;
            int idpersona = idPersona;
            int idInmobiliaria = int.Parse(null);
            connection.Open();
            MySqlCommand InsertarInmueble = new MySqlCommand("INSERT INTO tInmueble(idTipoinmueble, txTipoTransaccion, idProvincia, idLocalidad, idBarrio, txCalle, txAltura, txLote, txSuperficieCubierta, txHabitaciones, txBano, txAgua, txAsfalto,  txBalcon, txClocas, txCocina, txComedor, txDescripcion, txGas, txJardin, txLiving, txLuz, txPatio, txQuincho, txTelefonoInmueble, txTerraza, idPersona, txValorInmueble, txTipoMoneda, idInmobiliaria)" + "VALUES ('" + tipoinmueble + "', '" + transaccion + "', '" + provincia + "','" + localidad + "', '" + barrio + "','" + calle + "','" + altura + "','" + lote + "','" + superficieCubierta + "','" + habitaciones + "','" + baño + "','" + agua + "','" + asfalto + "','" + balcon + "','" + clocas + "','" + cocina + "','" + comedor + "','" + descripcion + "','" + gas + "','" + jardin + "','" + living + "','" + luz + "','" + patio + "','" + quincho + "','" + telefonoInmueble + "','" + terraza + "', '" + idpersona + "', '" + valorInmueble + "', '" + tipoMoneda + "', '"+idInmobiliaria+"')", connection);
            InsertarInmueble.ExecuteNonQuery();
            connection.Close();
            GuardarImagenes(planilla);
        }
        private void GuardarImagenes(DtoPlanillaInmueble planilla)
        {

            try
            {
                int codigoinmueble = BuscarCodigoInmueble(planilla.Apellido, planilla.Nombre, planilla.Email);
                connection.Open();
                if (planilla.Foto1 != null)
                {

                    MySqlCommand InsertarImagenes1 = new MySqlCommand("INSERT INTO inmobiliaria.timagenes(Imagen, idInmueble)" + "VALUES ( ?image,  ?id)", connection);

                    InsertarImagenes1.Parameters.Add("?image", MySqlDbType.Blob).Value = planilla.Foto1;
                    InsertarImagenes1.Parameters.Add("?id", MySqlDbType.Int64).Value = codigoinmueble;
                    InsertarImagenes1.ExecuteNonQuery();
                    //connection.Close();
                }
                if (planilla.Foto2 != null)
                {
                    //connection.Open();

                    MySqlCommand InsertarImagenes2 = new MySqlCommand("INSERT INTO inmobiliaria.timagenes(Imagen, idInmueble)" + "VALUES ( ?image,  ?id)", connection);

                    InsertarImagenes2.Parameters.Add("?image", MySqlDbType.Blob).Value = planilla.Foto2;
                    InsertarImagenes2.Parameters.Add("?id", MySqlDbType.Int64).Value = codigoinmueble;
                    InsertarImagenes2.ExecuteNonQuery();
                    // connection.Close();
                }

                if (planilla.Foto3 != null)
                {
                    // connection.Open();

                    MySqlCommand InsertarImagenes3 = new MySqlCommand("INSERT INTO inmobiliaria.timagenes(Imagen, idInmueble)" + "VALUES ( ?image,  ?id)", connection);

                    InsertarImagenes3.Parameters.Add("?image", MySqlDbType.Blob).Value = planilla.Foto3;
                    InsertarImagenes3.Parameters.Add("?id", MySqlDbType.Int64).Value = codigoinmueble;
                    InsertarImagenes3.ExecuteNonQuery();
                    // connection.Close();
                }

                if (planilla.Foto4 != null)
                {
                    //connection.Open();

                    MySqlCommand InsertarImagenes4 = new MySqlCommand("INSERT INTO inmobiliaria.timagenes(Imagen, idInmueble)" + "VALUES ( ?image,  ?id)", connection);

                    InsertarImagenes4.Parameters.Add("?image", MySqlDbType.Blob).Value = planilla.Foto4;
                    InsertarImagenes4.Parameters.Add("?id", MySqlDbType.Int64).Value = codigoinmueble;
                    InsertarImagenes4.ExecuteNonQuery();
                    //connection.Close();
                }

                if (planilla.Foto5 != null)
                {
                    // connection.Open();

                    MySqlCommand InsertarImagenes5 = new MySqlCommand("INSERT INTO inmobiliaria.timagenes(Imagen, idInmueble)" + "VALUES ( ?image,  ?id)", connection);

                    InsertarImagenes5.Parameters.Add("?image", MySqlDbType.Blob).Value = planilla.Foto5;
                    InsertarImagenes5.Parameters.Add("?id", MySqlDbType.Int64).Value = codigoinmueble;
                    InsertarImagenes5.ExecuteNonQuery();
                    // connection.Close();
                }

                connection.Close();
            }
            catch (Exception ex)
            { }

        }
        public int BuscarCodigoInmueble(string apellido, string nombre, string email)
        {
            connection.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = connection;
            cmd.CommandText = "select MAX(i.idInmueble) From tinmueble i right outer join tpersonas p  on(p.idPersona = i.idPersona) where (p.txNombre) = '" + nombre + "' and (p.txApellido) = '" + apellido + "' and (p.txEmail) = '" + email + "'";
            Int32 inmueble = (Int32)cmd.ExecuteScalar();
            connection.Close();
            return inmueble;
        }
        public int BuscarPersonaExistente(string apellido, string nombre, string email)
        {
            connection.Open();
            string BuscoPersona = "SELECT idPersona From tpersonas where txEmail = '" + email + "' and txApellido = '" + apellido + "' and txNombre = '" + nombre + "' ";

            MySqlDataAdapter dt2 = new MySqlDataAdapter(BuscoPersona, connection);
            MySqlCommandBuilder builder1 = new MySqlCommandBuilder(dt2);
            DataTable Tabla2 = new DataTable();
            dt2.Fill(Tabla2);
            if (Tabla2.Rows.Count > 0)
            {
                connection.Close();
                return idPersona = BuscarIdPersona(apellido, nombre, email);
            }
            else
            {
                int persona = 0;
                idPersona = persona;
            }
            connection.Close();
            return idPersona;
        }
        public void UpdatePersona(int idPersona, DtoPlanillaInmueble planilla)
        {
            string codTelefono = planilla.CodTelefono;
            string telefono = planilla.Telefono;
            string codCelular = planilla.CodCelular;
            string celular = planilla.Celular;
            if (codTelefono != "" & telefono != "" || codCelular != "" & celular != "")
            {
                connection.Open();
                ///// BUSCO EL ULTIMO HISTORICO DE TELEFONO PARA LA PESONA.
                string BuscoHistorico = "SELECT txCodTelefono, txTelefono, txCodCelular, txCelular FROM thistoricotelefono where idPersona = '" + idPersona + "' ORDER BY idRegistroTelefono DESC LIMIT 1";
                MySqlCommand cmd = new MySqlCommand(BuscoHistorico, connection);
                MySqlDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    //  if (dr["txCodTelefono"].ToString() == null & dr["txTelefono"].ToString() == null || dr["txCodCelular"].ToString() == null & dr["txCelular"].ToString() == null)

                    string BaseCodTelefono = dr["txCodTelefono"].ToString();
                    string BaseTelefono = dr["txTelefono"].ToString();
                    string BaseCodCelular = dr["txCodCelular"].ToString();
                    string BaseCelular = dr["txCelular"].ToString();

                    ///// COMPARO QUE LO QUE HAY EN LA BASE SEA DISTINTO A LO QUE ESTAN INGRESANDO.
                    if (codTelefono != BaseCodTelefono || telefono != BaseTelefono || codCelular != BaseCodCelular || celular != BaseCelular)
                    {
                        dr.Close();
                        ///// INSERTO LOS NUEVO TELEFONOS EN LA TABLA HISTORICO.
                        MySqlCommand InsertarHistoricoTelefono1 = new MySqlCommand("INSERT INTO thistoricotelefono(idPersona, txCodTelefono, txTelefono, txCodCelular, txCelular)" + "VALUES ('" + idPersona + "', '" + codTelefono + "', '" + telefono + "','" + codCelular + "','" + celular + "')", connection);
                        InsertarHistoricoTelefono1.ExecuteNonQuery();

                        ///// ACTUALIZO EN LA TABLA PERSONA EL NUEVO TELEFONO INGRESADO.
                        string UpdatePersona1 = "UPDATE tPersonas SET txCodTelefono ='" + codTelefono + "', txTelefono = '" + telefono + "', txCodCelular = '" + codCelular + "', txCelular='" + celular + "' where idPersona = '" + idPersona + "'";
                        MySqlCommand comando1 = new MySqlCommand(UpdatePersona1, connection);
                        comando1.ExecuteNonQuery();
                        connection.Close();
                    }
                }
                else
                {
                    dr.Close();
                    MySqlCommand InsertarHistoricoTelefono = new MySqlCommand("INSERT INTO thistoricotelefono(idPersona, txCodTelefono, txTelefono, txCodCelular, txCelular)" + "VALUES ('" + idPersona + "', '" + codTelefono + "', '" + telefono + "','" + codCelular + "','" + celular + "')", connection);
                    InsertarHistoricoTelefono.ExecuteNonQuery();

                    ///// ACTUALIZO EN LA TABLA PERSONA EL NUEVO TELEFONO INGRESADO.
                    string UpdatePersona = "UPDATE tPersonas SET txCodTelefono ='" + codTelefono + "', txTelefono = '" + telefono + "', txCodCelular = '" + codCelular + "', txCelular='" + celular + "' where idPersona = '" + idPersona + "'";
                    MySqlCommand comando = new MySqlCommand(UpdatePersona, connection);
                    comando.ExecuteNonQuery();
                }
                connection.Close();
                GuardarInmueble(planilla);
            }
        }
        public void GuardarPersona(DtoPlanillaInmueble planilla)
        {
            /////Persona
            string apellido = planilla.Apellido;
            string nombre = planilla.Nombre;
            string codTelefono = planilla.CodTelefono;
            string telefono = planilla.Telefono;
            string codCelular = planilla.CodCelular;
            string celular = planilla.Celular;
            string email = planilla.Email;
            string vendedor = planilla.Vendedor;
            connection.Open();
            MySqlCommand InsertarPersona = new MySqlCommand("INSERT INTO tpersonas(txTipoVendedor, txApellido, txNombre, txCodTelefono, txTelefono, txCodCelular, txCelular, txEmail)" + "VALUES ('" + vendedor + "', '" + apellido + "', '" + nombre + "','" + codTelefono + "', '" + telefono + "','" + codCelular + "','" + celular + "','" + email + "' )", connection);
            InsertarPersona.ExecuteNonQuery();
            connection.Close();
            BuscarPersonaExistente(apellido, nombre, email);

            if (codTelefono != "" & telefono != "" || codCelular != "" & celular != "")
            {
                ///// GUARDO EN LA TABLA LOS HISTORICO TELEFONOS DE LA PERSONA.
                connection.Open();
                MySqlCommand InsertarTelefono = new MySqlCommand("INSERT INTO thistoricotelefono(idPersona, txCodTelefono, txTelefono, txCodCelular, txCelular)" + "VALUES ('" + idPersona + "', '" + codTelefono + "', '" + telefono + "','" + codCelular + "','" + celular + "')", connection);
                InsertarTelefono.ExecuteNonQuery();
            }
            connection.Close();
            GuardarInmueble(planilla);

        }
        private int BuscoIdPeronsa(string apellido, string nombre, string email)
        {
            return BuscarIdPersona(apellido, nombre, email);
        }
        private int BuscarIdPersona(string apellido, string nombre, string email)
        {
            connection.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = connection;
            cmd.CommandText = "SELECT MAX(idPersona) FROM tPersonas  where (txNombre) = '" + nombre + "' and (txApellido) = '" + apellido + "' and (txEmail) = '" + email + "'";
            Int32 idpersona = (Int32)cmd.ExecuteScalar();
            connection.Close();
            return idpersona;
        }
    }
}
